package com.ripcore.engine;


import com.ripcore.model.Router;

import java.util.List;

/**
 * 模拟引擎接口，用于控制和管理RIP协议模拟过程。
 * 提供对路由器的管理、模拟过程控制以及监听器设置等功能。
 */
public interface SimulationEngine {

    /**
     * 启动模拟过程
     */
    void start();

    /**
     * 停止模拟过程
     */
    void stop();

    /**
     * 重置模拟状态，清空所有路由器和相关数据
     */
    void reset();

    /**
     * 添加路由器到模拟环境中
     * @param r 要添加的路由器实例
     */
    void addRouter(Router r);

    /**
     * 从模拟环境中移除指定ID的路由器
     * @param routerId 要移除的路由器ID
     */
    void removeRouter(String routerId);

    /**
     * 根据路由器ID获取路由器实例
     * @param routerId 路由器ID
     * @return 对应的路由器实例，如果不存在则返回null
     */
    Router getRouter(String routerId);

    /**
     * 获取模拟环境中所有路由器的列表
     * @return 路由器列表
     */
    List<Router> listRouters();

    /**
     * 执行一次模拟步骤，推进模拟过程
     */
    void stepOnce();

    /**
     * 设置模拟事件监听器，用于接收模拟过程中的事件通知
     * @param listener 事件监听器实例
     */
    void setListener(SimulationEventListener listener);
}